{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {
    "deletable": true,
    "editable": true
   },
   "source": [
    "# Overview\n",
    "The notebook shows how the ```lime_image``` tools can be applied to a smaller dataset like mnist. The dataset is very low resolution and allows quite a bit of rapid-iteration."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "collapsed": false,
    "deletable": true,
    "editable": true
   },
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "from skimage.color import gray2rgb, rgb2gray, label2rgb # since the code wants color images"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "collapsed": true,
    "deletable": true,
    "editable": true
   },
   "outputs": [],
   "source": [
    "from sklearn.datasets import fetch_mldata\n",
    "mnist = fetch_mldata('MNIST original')\n",
    "# make each image color so lime_image works correctly\n",
    "X_vec = np.stack([gray2rgb(iimg) for iimg in mnist.data.reshape((-1, 28, 28))],0)\n",
    "y_vec = mnist.target.astype(np.uint8)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "collapsed": false,
    "deletable": true,
    "editable": true
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.text.Text at 0x24b3f51d8d0>"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\niqYffxER9wG/BT4K3Nzp7UlSP+v6FLVSygvAI8BB3d6WJPWbrodwRLyVKoDXd3tbktRvOh7CEXF1\nRPx5ROwfEf8V+C6wDbi109uSpH7XjSlq+wHfBPYBNgF3A0eXUp7rwrYkqa9144O5+Z1+TUkaVH7b\nsvrekUceWbv229/+du3aadOm1a5t9fL/F198sXbta6+9Vrt27733rl179NFH165ds6b+nQW2bdtW\nu1bewEeSUhnCkpTIEJakRIawJCUyhCUpkSEsSYkMYUlKZAhLUiJDWJISGcKSlMjLlrXTTJ48uXbt\n7Nmza9d+/etfr107c+bM2rXd9Mgjj9Suveaaa2rX3npr/ZsV3nXXXbVrL7300tq1V155Ze1aeSYs\nSakMYUlKZAhLUiJDWJISGcKSlMgQlqREhrAkJTKEJSmRISxJiQxhSUrkZcvaaW688cbatfPnz+9K\nDxHRE6/bymXZU6ZMqV27evXq2rXHHXdc7dp3vetdtWvVGs+EJSmRISxJiQxhSUpkCEtSIkNYkhIZ\nwpKUyBCWpESGsCQlMoQlKZEhLEmJvGxZ4zJnzpzatR/84Adr13br8uJWLutdvnx57dqrrrqqpT42\nbNhQu/bBBx+sXfv888/Xrj3++ONr13breMgzYUlKZQhLUiJDWJISGcKSlMgQlqREhrAkJTKEJSmR\nISxJiQxhSUpkCEtSoiiltPaEiGOBC4A5wEzglFLKsmE1lwN/B+wF/BvwyVLKozt4vdnAmtZbV7fM\nmjWrdu3KlStr106dOrWddsZ0++2316497bTTate28m3Ehx12WO1agK9+9au1azdt2lS7tpXLi7dt\n21a7duvWrbVr586dW7u2lUuy+9ScUsoDoxW0cyY8BVgLnAO8KcEj4iLgU8BZwJHAVmBFROzexrYk\naaC1fAOfUsodwB0AMfI/u58BriilfK9RcwawETgFWNp+q5I0eDo6JhwRBwAzgP//O2opZQvwU+CY\nTm5LkgZBpz+Ym0E1RLFx2PKNjXWSpCbOjpCkRJ0O4Q1AANOHLZ/eWCdJatLREC6lrKMK2xOGlkXE\nVOAo4J5ObkuSBkHLsyMiYgpwENUZL8CBEXE4sLmU8h/AdcAlEfEo8DhwBfAkcFtHOpakAdLOd8y9\nB7iT6gO4AnyhsfxrwN+WUj4fEZOBr1BdrHEX8FellNc60K8kDZR25gmvZoxhjFLKZcBl7bUkSROH\n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\n/wBqx2rmFyY1twAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x24b30435358>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "%matplotlib inline\n",
    "fig, ax1 = plt.subplots(1,1)\n",
    "ax1.imshow(X_vec[0], interpolation = 'none')\n",
    "ax1.set_title('Digit: {}'.format(y_vec[0]))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "deletable": true,
    "editable": true
   },
   "source": [
    "# Setup a Pipeline\n",
    "Here we make a pipeline for processing the images where basically we flatten the image back to 1d vectors and then use a RandomForest Classifier"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "collapsed": false,
    "deletable": true,
    "editable": true
   },
   "outputs": [],
   "source": [
    "from sklearn.pipeline import Pipeline\n",
    "from sklearn.ensemble import RandomForestClassifier\n",
    "from sklearn.preprocessing import Normalizer\n",
    "\n",
    "class PipeStep(object):\n",
    "    \"\"\"\n",
    "    Wrapper for turning functions into pipeline transforms (no-fitting)\n",
    "    \"\"\"\n",
    "    def __init__(self, step_func):\n",
    "        self._step_func=step_func\n",
    "    def fit(self,*args):\n",
    "        return self\n",
    "    def transform(self,X):\n",
    "        return self._step_func(X)\n",
    "\n",
    "\n",
    "makegray_step = PipeStep(lambda img_list: [rgb2gray(img) for img in img_list])\n",
    "flatten_step = PipeStep(lambda img_list: [img.ravel() for img in img_list])\n",
    "\n",
    "simple_rf_pipeline = Pipeline([\n",
    "    ('Make Gray', makegray_step),\n",
    "    ('Flatten Image', flatten_step),\n",
    "    #('Normalize', Normalizer()),\n",
    "    #('PCA', PCA(16)),\n",
    "    ('RF', RandomForestClassifier())\n",
    "                              ])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "collapsed": false,
    "deletable": true,
    "editable": true
   },
   "outputs": [],
   "source": [
    "from sklearn.model_selection import train_test_split\n",
    "\n",
    "X_train, X_test, y_train, y_test = train_test_split(X_vec, y_vec,\n",
    "                                                    train_size=0.55)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "collapsed": false,
    "deletable": true,
    "editable": true
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Pipeline(steps=[('Make Gray', <__main__.PipeStep object at 0x0000024B3F533A20>), ('Flatten Image', <__main__.PipeStep object at 0x0000024B3F533828>), ('RF', RandomForestClassifier(bootstrap=True, class_weight=None, criterion='gini',\n",
       "            max_depth=None, max_features='auto', max_leaf_nodes=None,\n",
       "      ...imators=10, n_jobs=1, oob_score=False, random_state=None,\n",
       "            verbose=0, warm_start=False))])"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "simple_rf_pipeline.fit(X_train, y_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "collapsed": false,
    "deletable": true,
    "editable": true
   },
   "outputs": [],
   "source": [
    "%load_ext autoreload\n",
    "%autoreload 2\n",
    "import os,sys\n",
    "try:\n",
    "    import lime\n",
    "except:\n",
    "    sys.path.append(os.path.join('..', '..')) # add the current directory\n",
    "    import lime"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "collapsed": true,
    "deletable": true,
    "editable": true
   },
   "outputs": [],
   "source": [
    "from lime import lime_image\n",
    "from lime.wrappers.scikit_image import SegmentationAlgorithm\n",
    "explainer = lime_image.LimeImageExplainer(verbose = False)\n",
    "segmenter = SegmentationAlgorithm('quickshift', kernel_size=1, max_dist=200, ratio=0.2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "collapsed": false,
    "deletable": true,
    "editable": true,
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Wall time: 3.34 s\n"
     ]
    }
   ],
   "source": [
    "%%time\n",
    "explanation = explainer.explain_instance(X_test[0], \n",
    "                                         classifier_fn = simple_rf_pipeline.predict_proba, \n",
    "                                         top_labels=10, hide_color=0, num_samples=10000, segmentation_fn=segmenter)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {
    "collapsed": false,
    "deletable": true,
    "editable": true
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.text.Text at 0x24b40a07b38>"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\nfzQ46cP0/wE8AAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x24b409c3be0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "\n",
    "temp, mask = explanation.get_image_and_mask(y_test[0], positive_only=True, num_features=10, hide_rest=False, min_weight = 0.01)\n",
    "fig, (ax1, ax2) = plt.subplots(1,2, figsize = (8, 4))\n",
    "ax1.imshow(label2rgb(mask,temp, bg_label = 0), interpolation = 'nearest')\n",
    "ax1.set_title('Positive Regions for {}'.format(y_test[0]))\n",
    "temp, mask = explanation.get_image_and_mask(y_test[0], positive_only=False, num_features=10, hide_rest=False, min_weight = 0.01)\n",
    "ax2.imshow(label2rgb(3-mask,temp, bg_label = 0), interpolation = 'nearest')\n",
    "ax2.set_title('Positive/Negative Regions for {}'.format(y_test[0]))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {
    "collapsed": false,
    "deletable": true,
    "editable": true
   },
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAA80AAAHvCAYAAABuTT3hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAAPYQAAD2EBqD+naQAAIABJREFUeJzs3XuYZGdZL+zfQxJIIAnKSYEYYEISichJ0YghKCjKUQII\nchL4BDeBLah7b1DcECAEdG8/lcMGxRAVPg+ACIGAGCFBkY1E0RjkkEAykWBIwinkQEDIvN8fq0Y6\n3eud6Zqu7uruuu/rqmtm3lq16u2e31Orn1qr3q7WWgAAAICVbjTvCQAAAMBmpWkGAACADk0zAAAA\ndGiaAQAAoEPTDAAAAB2aZgAAAOjQNAMAAECHphkAAAA6NM0AAADQoWneAFX1lKraVVWHr2Lb+022\nPX4j5rbsue9cVWdW1ZVVdX1VPXyj58D2I/8sOjXAIpN/Fp0a2B4WrmmuqidPwrj7dl1VnV9Vr6qq\n26zT07bJbek8TqyqJ+9h+3l4Q5LvSfL8JE9K8o/r/YRV9XNV9fHJ/8MFVfVf1/s5F5n879GG5n/y\nPXhzVf3b5P/itPV8PgZqYI82rAaq6rCqOqmqPlxVX6qqz1fV2VX1gPV6TuR/LzYy/wdW1eur6qOT\nBuXqqjq3qp5dVfuv1/OiBvZiw/uA3arquMn/x/VVdYuNet5pVGvz+n+Zj0lAT0vygiQXJzkwyXFJ\nfnby77u21r424+esJAe01v5jydhHk3y+tXb/ke1vvHTbjVBVByb5apKTW2snbdBz/pckr03yliRn\nJrlvhv+H57XW/vdGzGHRyH93jvPI/84kByc5J8mPJfnj1tr/sxHPvcjUQHeOG1oDVfWsJL+R5O1J\nPphk/wz/B9+X5KmttT9a7zksIvnvznGj8//tSd6V5G8zfN93JblPhkblT1trT1zvOSwqNdCd44b/\nHLTkuSvJPyU5IsnNkty6tfaljZzDaizyu1nvaa390+Tvp1XVl5L8UpKfSvKmWT5RG96ZWHX4N7pQ\nJna/u/aVWe2wqm7aWvtq574Dk7w0yTtba4+dDL++qvZL8oKqel1rbWZzYQX5v6ENzf/E8a21Sybb\nXj2r52XV1MANbXQNnJXk8KU/GFXV7yU5N8lLkmia15f839CG5r+19uUMTfJSr6uqq5I8q6p+ubV2\nxazmwig1cEPz+Dlot/+S5PZJTk3ynFk9/6wt3OXZe3BWkkpyp90DVXWnqnpLVX2xqq6tqg9V1YOX\nP7CqfqGq/nWyzZeq6h+q6meW3H+DzzJMzjB9T5IfWXJ5yFmT+27wWYbJ5SJXT5rM5c/7p1V16eQd\nmt1jD6qqv62qa6rqqqo6o6qO2dMXXlUnZXh3rSX5zcnzX7Tk/ntW1V9W1Vcmc3lvVf3gsn3svtzl\n+Kp6TVVdnuSSPTztjya5RZLXLBv/PxnOvj1kT3Nm5uR/Y/Of3Q0zm4Ya2MAaaK19YvmZhMkPiu9O\nclhV3WxPc2bm5H+DjwEd/zb589v24bGsjRqYQw3UcNXFyRnO/G/qk2WLfKZ5uTtP/vxiktTwuYYP\nZbhs4xVJvpTkyUneUVWPaq2dPtnu6ZP735zkdybb3y3JDyb5s8k+l3+W4TlJXp3k6gxnWyvJ5Uvu\nX7rtm5I8M0MT+dbdg1V1UJKHJjlt8g5WqupJSf4wyXuSPDfJTZOcmOQDVXXP1tpnOl/7W5N8eTL/\nP8nwQ8s1k31+T4bLh76S5NeTfDPDO0Lvr6rjW2v/sGxfr0lyRZIXZ7jEoueekz8/smz8IxkuU7rn\nZC5sDPnf2Pyz+aiBzVEDt81wieBqzk4wO/I/h/xX1QFJDk1yUJJ7J/lvGZqXT+/tscycGpjPMeCl\nST6X5HVJXriK7eentbZQtwyBvz7Dmc5bZrgc4LFJPp8hILedbPfbk+1+aMljb5bkwiQXLhl7W5Lz\nVvmchy8Z+2iSs0a2vd9k2+OXjF2S5M3LtvvpyXY/vGRuX0ry2mXb3TpDIfzuXuZ4hwzN6i8vG39b\nkuuS3GHJ2HdmKJ6zl32Nu5K8Pxk+K7+X53tVkv/o3Hd5hs93zj0v2+0m/5sj/yPPf3WGA9/cM7Ld\nb2pgc9bAZB93ztAs/8G8c7Jdb/K/ufI/+d7vWnL7cJLvmXdOtvNNDWyeGsjw5sI3kjxg8u+TJl/T\nLeadk7Hbol6eXUnel6FALsnwrspVSR7RWvvcZJsHJTmntfah3Q9qrV2b4Z2QOy651OHKDJeSff86\nzvctSR5cVTddMvbYJP/eWvvg5N8/nuTmSf6sqm65+5bh3aoPZ3hxmEpV3Wiy37e11nZfMpTW2mUZ\nvmfHVdXBSx7Skvx+myR/Lw5K//MdX5vcz/qQ/1VY5/wzX2pgFTayBiZnTd6SoWn+1Wkfz1TkfxU2\nKP9nZVgI8tEZFkb9RoaPqLG+1MAqbEANvDLJu1pr75t2bvOwqE1zy3C5wo8l+ZEkx7TWjmitvXfJ\n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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x24b3a37dd68>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# now show them for each class\n",
    "fig, m_axs = plt.subplots(2,5, figsize = (12,6))\n",
    "for i, c_ax in enumerate(m_axs.flatten()):\n",
    "    temp, mask = explanation.get_image_and_mask(i, positive_only=True, num_features=1000, hide_rest=False, min_weight = 0.01 )\n",
    "    c_ax.imshow(label2rgb(mask,X_test[0], bg_label = 0), interpolation = 'nearest')\n",
    "    c_ax.set_title('Positive for {}\\nActual {}'.format(i, y_test[0]))\n",
    "    c_ax.axis('off')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "deletable": true,
    "editable": true
   },
   "source": [
    "# Gaining Insight\n",
    "Can we find an explanation for a classification the algorithm got wrong"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {
    "collapsed": false,
    "deletable": true,
    "editable": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Using #9381 where the label was 8 and the pipeline predicted 9\n"
     ]
    }
   ],
   "source": [
    "pipe_pred_test = simple_rf_pipeline.predict(X_test)\n",
    "wrong_idx = np.random.choice(np.where(pipe_pred_test!=y_test)[0])\n",
    "print('Using #{} where the label was {} and the pipeline predicted {}'.format(wrong_idx, y_test[wrong_idx], pipe_pred_test[wrong_idx]))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {
    "collapsed": false,
    "deletable": true,
    "editable": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Wall time: 2.44 s\n"
     ]
    }
   ],
   "source": [
    "%%time\n",
    "explanation = explainer.explain_instance(X_test[wrong_idx], \n",
    "                                         classifier_fn = simple_rf_pipeline.predict_proba, \n",
    "                                         top_labels=10, hide_color=0, num_samples=10000, segmentation_fn=segmenter)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {
    "collapsed": false,
    "deletable": true,
    "editable": true
   },
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAA80AAAHvCAYAAABuTT3hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAAPYQAAD2EBqD+naQAAIABJREFUeJzs3XuYbGdZJ+zfk+NOQsJJUBACAQKjYhiSDOAEEiM4IhAO\n6ggCQvg8kICGw3z6XcgwERg1CDojwwTlEBl15GyEBEUIAQEDAQIKKBAMJEAQsiFACEkMJO/3x6ot\nne717t21d1VX7677vq519d5vrVr1dvfv6eqn1qq3q7UWAAAAYK19Fj0BAAAA2Kw0zQAAANChaQYA\nAIAOTTMAAAB0aJoBAACgQ9MMAAAAHZpmAAAA6NA0AwAAQIemGQAAADo0zRugqk6uqhur6vB17HvC\nZN/jN2Juqx77blX1tqr6elXdUFUP3+g5sPXIP8tODbDM5J9lpwa2hqVrmqvqiZMw7tiurapPVdX/\nqqrbzulh22RbOY9Tq+qJO9l/Ef4kyQ8l+Y0kP5/kQ/N+wKr6har6p8n34eKq+pV5P+Yyk/+d2tD8\nT74Gr6uqyybfi7Pm+XgM1MBObVgNVNUdqur0qrqwqq6squ1V9c6qeuC8HhP534WNzP+2qnplVX1s\n0qB8s6r+vqpOq6r95vW4qIFd2PA+YIequv/k+3FDVd1qox53GtXaor4vizEJ6FlJnpPk0iTbktw/\nyRMm/79na+26GT9mJdm/tXb9irGPJdneWvuxkf0PWLnvRqiqbUmuSfL81trpG/SYT07y0iSvT/K2\nJA/I8H34/1prL9yIOSwb+e/OcRH5/2ySmyX5QJIHJfm/rbX/ZyMee5mpge4cN7QGquqpSV6Q5C+T\n/F2S/TJ8D45J8qTW2v+Z9xyWkfx357jR+b9lkrckeXeGr/uNSf5jhkbl1a21x897DstKDXTnuOG/\nB6147Ery4SR3TXJIktu01q7cyDmsxzK/mvXW1tqHJ/8+q6quTPKMJI9I8tpZPlAbXplYd/g3ulAm\ndry69o1ZHbCqDm6tXdO5bVuS/57knNbaoyfDr6yqfZM8p6pe1lqb2VxYQ/5vakPzP3F8a+3zk32/\nOavHZd3UwE1tdA2cn+Twlb8YVdUfJfn7JM9LommeL/m/qQ3Nf2vtaxma5JVeVlVXJXlqVT2ztXbF\nrObCKDVwU4v4PWiHJyf5/iSvSPK0WT3+rC3d5dk7cX6SSnLEjoGqOqKqXl9VX62qb1XV+6rqIavv\nWFW/WlUfn+xzZVV9sKoes+L2m7yXYXKG6YeS/OiKy0POn9x2k/cyTC4X+eakyVz9uK+uqi9OXqHZ\nMfaTVfXuqrq6qq6qqnOr6gd39olX1ekZXl1rSV40efzPrLj93lX111X1jclczquq+646xo7LXY6v\nqjOr6stJPr+Thz0xya2SnLlq/H9nOPv20J3NmZmT/43Nf3Y0zGwaamADa6C19onVZxImvyj+VZI7\nVNUhO5szMyf/G/wc0HHZ5OMtduO+7Bk1sIAaqOGqi+dnOPO/qU+WLfOZ5tXuNvn41SSp4X0N78tw\n2cYfJLkyyROTvLmqfrq19qbJfr80uf11Sf7nZP+jktw3yWsmx1z9XoanJXlJkm9mONtaSb684vaV\n+742yVMyNJFv3DFYVQcleViSsyavYKWqfj7Jq5K8NcmvJzk4yalJ3lNV926tfa7zub8xydcm8//z\nDL+0XD055g9luHzoG0nOSPKdDK8Ivauqjm+tfXDVsc5MckWS52a4xKLn3pOPF60avyjDZUr3nsyF\njSH/G5t/Nh81sDlq4HYZLhFcz9kJZkf+F5D/qto/yWFJDkryH5L8lwzNyz/v6r7MnBpYzHPAf0/y\nL0leluS/rWP/xWmtLdWWIfA3ZDjTeesMlwM8Osn2DAG53WS//zHZ70dW3PeQJJckuWTF2NlJPrrO\nxzx8xdjHkpw/su8Jk32PXzH2+SSvW7Xff57sd9yKuV2Z5KWr9rtNhkL4w13M8U4ZmtVnrho/O8m1\nSe60Yuz7MhTPO1d9jjcmeVcyvFd+F4/3v5Jc37ntyxne37nwvGy1Tf43R/5HHv+bGZ74Fp6Rrb6p\ngc1ZA5Nj3C1Ds/zHi87JVt3kf3Plf/K1v3HFdmGSH1p0TrbypgY2Tw1keHHh20keOPn/6ZPP6VaL\nzsnYtqyXZ1eSd2QokM9neFXlqiSPbK39y2Sfn0zygdba+3bcqbX2rQyvhNx5xaUOX89wKdmxc5zv\n65M8pKoOXjH26CSXt9b+bvL/H09y8ySvqapb79gyvFp1YYYfDlOpqn0mxz27tbbjkqG01r6U4Wt2\n/6q62Yq7tCQvb5Pk78JB6b+/47rJ7cyH/K/DnPPPYqmBddjIGpicNXl9hqb5WdPen6nI/zpsUP7P\nz7AQ5M9kWBj12xneosZ8qYF12IAaeHGSt7TW3jHt3BZhWZvmluFyhQcl+dEkP9hau2tr7bwV+9wp\nyadG7vuJFbcnw+qfVyf5QA1/MuklVbV6cYc99doMl1g8PElqeK/XT2a4FGSHIzP8EHhnhh8CO7Yr\nMgT+NrvxuLeZPO7FI7d9IkN+7rhq/NJ1HvvaJAd0bts2uZ35kP/1mWf+WSw1sD4bUgOTX8xem+Tf\nJfnpyS9kzI/8r8/c899a295aO7+19hettadmWFH77TW/P33EQA2sz9xqoKoeneR+Gd6SsFdY5vc0\nf7B9d9W83dZa+2RV3SPD+woenOSnkjylqp7bWnvunh5/8hgXVtWlSX42w/sjHp6hsVxZLPtk+CHw\n+Nz0fRE7fGcWc1mH9Ta7/5Jk36r6ntbaV3YMTt7fc+skX5zH5Pg38j8fXuzZe6iB+didGnhFkock\neWxr7W9nPB/Gyf987OlzwBuS/FaGFZxfvufTYSfUwHystwZ+N8MZ9O9U1Y4XIG45+Xh4VR244qz/\nprDMTfOuXJbkHiPjP7Di9iRJa+3aDN/419fwR+nPTvLsqvqd1l82ftrL116X5LTJZRCPTnJpa+0D\nK26/JMMrTNtba+dPeeye7Rkulet9HW7M7q0OmQx/VqSSHJthwYId/kOGwv/73TwusyH/880/m58a\n2IAaqKoXZngv3NNaa6/b1f5sGPlfzHPAjrem3XzGx2V6amC+NXDHJI9N8riR2z6coQ84ejePPRfL\nenn2evxVkvvUiiXVJ5dD/HKSz7bW/mkydquVd2qtfSfDJQuVZP+dHP9bme5PCrw2yYFJTk7yE1n7\nN+T+JsP7MX5jUrA3UVXfM8VjJUlaazcmeVuSR9RkmfzJsb43yc8leU9r7eppjztxfoYFC05dNX5q\nhq/NW3bzuMyG/M83/2x+amDONVBVv5bh0rzfaq29ZHePw1zI/xzzP3mv6ZhfytBMfWh3jstMqYH5\nPgc8MsmjJh93bK/Nd8+WP2M3jzs3y3qmuXa9S87IEIi3VtWLMzR4J2d4D8NPrdjvbVX1pSR/l+Fy\niB9M8tQk504WDOi5KMkpVfXsDH9a4IrW2jt782utfaSqLslw2c4BueklGWmtfbOqTk3yJ0k+XFWv\nyfAK0eEZlql/b5LT1vF5r/ZfM7zn4++q6swMq9r98mQOv75q3/V8XXfM97qqek6Sl1TV6zIU+/EZ\nXnX6jdba13djrqyP/K/fXPKfJFX1sCT3ynefWO81+XokyZtaax/fjfmyPmpg/eZSA1X1qAzvBbw4\nyaeqavXZhre11rbvxnzZNflfv3k9Bzy+qk5J8pdJPpPk0AyN0IOSvLm19q7dmCvrpwbWb159wJtX\nj1XVjj9H+9bW2pW7Mdf5aptgCe+N3PLdZd+PXse+d87wqsdXM7wi9L4kD161zy9meNP9FRkuYbg4\nye8kudnIY65cav62Sd6cYdW9GzJZdj4jS82vuM/zJ7d9cidzPj7Dq2NXTuZ8cZJXJrn3Lj7XO02O\n/YyR2+41OeY3MvxpnLcnuc/ufl1X3e8XkvxThvdAXJzkVxedka28yf/myX+SP57cZ2x7wqKzslU3\nNbA5aiDf/dMivW3N52+T/y2U/2MyvDf1s5Ov21VJPpihqdln0TnZypsa2Bw10JnDjueFTfknp2oy\nSQAAAGAV72kGAACADk0zAAAAdGiaAQAAoEPTDAAAAB2aZgAAAOjQNAMAAECHpnnJVdW7qur8Rc8D\nFkUNsMzkn2WnBlhm8r9+muYZqqqnVNWNVfW+PTzOs6rqEbOa1y6s6w911+CUqvpIVX2zqr5UVX9V\nVT8y7wmy91ADLDP5Z9mpAZaZ/G9tmubZemySzya5T1XdZQ+O8xtJNqpY1utFSc5M8g9JnjH5/92T\n/G1VHbvIibGpqAGWmfyz7NQAy0z+tzBN84xU1RFJ/mOSZyb5SpLHLXZGs1NV+yY5JcnrWmsnt9Ze\n0Vp7UZIHJdkvW+hzZfepAZaZ/LPs1ADLTP63Pk3z7DwuyZVJ3pLkDekEaHJ5w9Oq6qNVdW1VXVFV\nf11VR09uvzHJwUlOnlzicWNVnTW57VVV9dmRY/7m5H4rx55UVe+oqi9X1XVV9Y9Vdcpufm77Jzko\nyRWrxrcnuTHJNbt5XLYWNcAyk3+WnRpgmcn/FrffoiewhTw2yRtba9+pqlcnOaWqjmmtXbRqv7OS\nPDFDUb08w/fgAUnul+TDSR6f5JVJLkzyssl9Lpl8bBl/78HY+ClJPp7kTUm+k+SkJGdWVbXWXjrN\nJ9Zau66qLsxQwO9P8p4kt0zynCRfnXweoAZYZvLPslMDLDP53+paa7Y93JIck+GVlhNXjH0uye+v\n2u/EyX6/v4vjfTPJWSPjf5zkMyPjpye5YdXYgSP7/XWST68ae2eS89fxOd4lyYcm89+xfTrJkYv+\n+tsWv6mBxX8PbIvb5H/x3wPbYjc1sPjvgW1xm/wv/nuwEZvLs2fjcUm+lORdK8Zem+QxVVUrxn46\nQ8ieN+8Jtdb+dce/q+qwqrp1kncnuUtVHbobh7w6yT8meUmSRyU5NcOrY2+qqlvNYMrs3dQAy0z+\nWXZqgGUm/0tA07yHqmqfJI/O8ErNXarqrlV11yQfSPJ9SR64Yve7JPlia+3rGzCv46rqvKq6OsnX\nM7zv4LcmN998ymPtm+S8JF9vrZ3WWntTa+2Pkvx4krsm+bUZTp29jBpQA8tM/uV/2akBNbDM5H95\n8u89zXvux5LcLsljkvzcqttahlefzpvRY/X+ltq+K/9TwzL35yX5RIZl4T+f5PokD03y9Ez/Ysnx\nSe45OdZ3J9PaP1fVJ5IcN+Xx2FrUgBpYZvIv/8tODaiBZSb/S5J/TfOee3ySLyd5SpJaddtPJ3lU\nVZ0yuUzikiT/qapusYtXmXpF8bUktxgZv/Oq/5+U5IAkJ7XWLt8xWFUPzO753smc9h25bf/I0bJT\nA2pgmcm//C87NaAGlpn8L0n+XZ69B6pqW4br+s9prZ3dWvuLlVuG6/4PS/LwyV3emOFrfvouDv2t\njBfFJUluXlX3XDGH2yV55Kr9bph83GfFfjdPcvK6PrG1Ls7wg+AxKwdrWB7/HhlW+2MJqQE1sMzk\nX/6XnRpQA8tM/pcr/9Va78UMdqWqHp3k1Uke3lo7d+T2yrAwwPtaa4+cjP2fDK9KvXWy7ZNhqfnz\nW2tnTvY5N8OlEKcn+WKSz7bWPjB5o/1lGV7RenGSQzIsKX9FkqNba/tO7n/3JB9N8qkkf5Tk0CS/\nmGE1vnslOaK19rnJvu9M0lprP7aLz/VvMvwR879M8rYkt0/yKxleXTq2tfbpqb54bAlqQA0sM/mX\n/2WnBtTAMpP/Jcv/zpbWtu18y/C3z65Osm0n+5yV5Lokt5z8v5I8M8MKdNdmKKZzk/z7Ffe5e4YF\nBa7O8GrRWStue2CSf5jc958yvH9ibKn5hyb5SIZXqy5J8l8yvMJ0Q5LDV+z3ziTvWMfnemCSZyf5\n2GReV2YonKMW/X2wLW5TA2pgmTf5l/9l39SAGljmTf6XK//ONAMAAECH9zQDAABAh6YZAAAAOjTN\nAAAA0KFpBgAAgA5NMwAAAHTst+gJJElVWcKbhWut1aIeWw2waPLPMltk/hM1wOItsgZOkn8W7Jx1\n5N+ZZgAAAOjQNAMAAECHphkAAAA6NM0AAADQoWkGAACADk0zAAAAdGiaAQAAoEPTDAAAAB2aZgAA\nAOjQNAMAAECHphkAAAA6NM0AAADQoWkGAACADk0zAAAAdGiaAQAAoEPTDAAAAB2aZgAAAOjQNAMA\nAECHphkAAAA6NM0AAADQoWkGAACAjv0WPYGt6ElPetLo+CMe8YjR8fe+971rxs4555zRfT/1qU/t\n/sRgg4zVwDT5T9QAey/5Z9mpAZbZLPJ/bif/n5T/hXGmGQAAADo0zQAAANChaQYAAIAOTTMAAAB0\naJoBAACgw+rZc3DJJZeMjl9zzTWj4w94wAPWjB133HFTHfsFL3jB6Pj27dtHx2GexnI6Tf6T6WpA\n/tlM5J9lpwZYZmMZvbaT/+M7+b//FPk/Q/43hDPNAAAA0KFpBgAAgA5NMwAAAHRomgEAAKBD0wwA\nAAAd1Vpb9BxSVYufxAY4/vjjR8ef8IQnrBk76KCDRvc99NBDR8d7q1Ked955o+N/9md/tmbsuuuu\nG913WbTWalGPvQw1ME3+k+lqYBb5T5a7BuR/vuR/c1tk/hM1MEYNbKxF1sBJ8r9GL/+HTZH/t8v/\nup2zjvw70wwAAAAdmmYAAADo0DQDAABAh6YZAAAAOjTNAAAA0LHfoiewFR1yyCGj4wcffPDo+MUX\nX7xm7Oqrrx7d9053utPo+JFHHjk6ftJJJ42O3/72t18zdsYZZ4zue/3114+OQ89YDUyT/2S6GphF\n/pPxGpB/piX/LDs1wDLb6PzfvZP/h0+Z/xeM5P9fN1H+z+2MP2yDHt+ZZgAAAOjQNAMAAECHphkA\nAAA6NM0AAADQUa21Rc8hVbX4SeyGe9zjHqPjp5566uj4EUccscePuX379tHxCy64YHT8wQ9+8Oj4\ngQceuGbsoosuGt33ec973jpnt3drrdWiHnsZamAW+U/Ga2AW+U/Ga0D+50/+10/+52OR+U/UwDTU\nwHxs1eeAeS4SNU3+77KA/P9EJ//bpsj/czdR/nsLgY2Z9vt+zjry70wzAAAAdGiaAQAAoEPTDAAA\nAB2aZgAAAOjQNAMAAEDHfouewN7g0EMPHR2fdpXsD37wg6Pjb37zm9c9l8MOO2x0/Nprrx0df897\n3jM6/sIXvnDN2DHHHDO671FHHTU6/tGPfnR0nK1nFjUwi/wn4zUwi/wn4zUg/8j/WvK/XNTAWmpg\neRzWyf9T9tL8/24n/0dvkvxPs0r2tMfYk9XUnWkGAACADk0zAAAAdGiaAQAAoEPTDAAAAB2aZgAA\nAOiwevY6nHjiiaPjvVWye3or5C1iBcaXvexla8ae/OQnj+770Ic+dHTcypHLYxY1sNnzn4zXgPwj\n/2vJ/3KZZw0cPoMs3aIzfrvO+Bc7NfD9aoARPzrH/P/WAnL0yU7+zx3J/8Pk/9840wwAAAAdmmYA\nAADo0DQDAABAh6YZAAAAOjTNAAAA0GH17HW49a1vPdX+l19++ej45z//+VlMZybe/e53rxnrrZ59\nv/vdb3R8//33Hx3/9re/vfsTY1OaRQ1s9vwn4zUg/8j/WvK/XGZRA/fq1MDXdmtGe+Y9nRp4jBpg\nxCzyf+Ze8ByQkfzft5P/Azr5v36T5//cPbivM80AAADQoWkGAACADk0zAAAAdGiaAQAAoMNCYHNw\n0UUXjY5/7WuLWO5i3DHHHLPufS+99NLR8RtuuGFGs2GrGasB+WdZyD/LTg2wzD60hfJ/mfz/G2ea\nAQAAoEPTDAAAAB2aZgAAAOjQNAMAAECHphkAAAA6rJ49B4cccsiip/BvTjjhhNHx0047bd3HuOqq\nq0bHW2u7NSe2vs1SA/LPIsg/y26z1MCPdmrgCDWwNM6dwTGeNOX+N9sk+e89B7x9Bvm/cQnz70wz\nAAAAdGiaAQAAoEPTDAAAAB2aZgAAAOjQNAMAAECH1bPX4TOf+czo+A033DA6fuKJJ46OH3rooaPj\nZ5999pqxr3zlK6P73u1udxsdP+6440bH73vf+46O77ff+r/1Rx111Oj4/vvvPzp+/fXXr/vY7B1m\nUQPT5D+Zrgbkn3mS/7Xkf7nMswa+PWUNHDlSA1d2auDOaoAZ+OwM8v++Tv5/YQbPAWd4DtgQzjQD\nAABAh6YZAAAAOjTNAAAA0KFpBgAAgA5NMwAAAHRUa23Rc0hVLX4Su+EhD3nI6PjJJ588On7ggQfO\ncTbTue6669aMbdu2bapjXHjhhaPjL3rRi9aM7Q2r6bXWalGPvQw1sNnzn0xXA9PkP9n8NSD/05P/\nteR/96iBjaUG1vIcML0zO/l/0ibP/7Wd/B80Rf7f38n/73Xy/69T5P/cde85O+vJvzPNAAAA0KFp\nBgAAgA5NMwAAAHRomgEAAKBD0wwAAAAdVs+eg9ve9raj48cee+zo+JFHHrlm7IQTThjdd999951q\nLm94wxtGx9/0pjetax5Jcsopp4yO9z7PCy64YM3Yi1/84tF9r7322tHxRbBy5OyMZWOa/CezqYFp\n8t+byyzyn4zXgPwP5H8t+d9YVs+eLTWwlhroW4b8/2Yn/3efY/5f38n/L3Xy/4wp8v+9U+b/D6bI\nv9WzAQAAYC+jaQYAAIAOTTMAAAB0aJoBAACgw0Jgm9TRRx89On766aePjl922WWj46eddtoez+VW\nt7rV6PgrXvGK0fGxRQqe/exnj+778Y9/fPcnNmMWwdhcpqmBzZ7/ZLwG5H8g/2vJ/8ayENjms9Vq\n4P0jNfA7aiCJ/I/p5f9DU+T/iDnm/0ud/O/Xyf9RI/m/cyf/FgIDAACAvYymGQAAADo0zQAAANCh\naQYAAIAOTTMAAAB07LfoCbD5XXnllaPjL3/5y0fHTznllDVjxx133Oi+m2n1VBgzi/wn4zUg/2x2\n8s+ym1UNXDn2e5AaYJObNv+ndvJ/xkj+/3Avy78zzQAAANChaQYAAIAOTTMAAAB0aJoBAACgQ9MM\nAAAAHVbP3qQ++tGPjo5fc801o+N3vOMdR8fvcIc7jI5/4Qtf2L2JrfD2t799dPxxj3vcmrEHP/jB\no/u+9a1vHR2/7LLLdn9ibAnT1MBmz38yXgPyT4/8s+yWoQb279TAS9TA0uvl/1ubJP9P6+T/8VPk\n/6md/GeT5t+ZZgAAAOjQNAMAAECHphkAAAA6NM0AAADQoWkGAACADqtnb1Lf+c53RsdvvPHG0fF9\n9hl//ePQQw+d2ZxWO/zww0fHDzjggDVj27dvH9338ssvn+mc2DqmqYHNnv9kvAbknx75Z9lt9hp4\nyhxr4GG7P61/c+4MjsHi9PLfNkn+p30OuGILPAc40wwAAAAdmmYAAADo0DQDAABAh6YZAAAAOjTN\nAAAA0GH17L3MJZdcMjp+r3vda3T8Gc94xuj4K1/5yjVjH/7wh0f33bZt2+j4qaeeOjp+4IEHrhl7\n//vfP7pvb3VA6BmrgVnkPxmvgVnkPxmvAflnWvLPstssNXDHGdTAt+dYA7NYgZvNZ5r8v6OT/0fN\nIP9vmTL/F26B5wBnmgEAAKBD0wwAAAAdmmYAAADo0DQDAABAR7XWFj2HVNXiJ7GXOPjgg0fHn/Ws\nZ42O//AP//DoeFWtGbvssstG973lLW85On7YYYeNjl955ZVrxk4//fTRfT/3uc+Nji9Ca23tF2WD\nqIH1G6uBWeQ/Ga+BWeQ/Ga8B+R/I//rJ/3wsMv+JGpjG3loDH9zkNXCO54C9wlj+L+jk/56d/O+z\ngPwfvcnzv57nAGeaAQAAoEPTDAAAAB2aZgAAAOjQNAMAAECHphkAAAA6rJ69xR1zzDGj409/+tPX\njPVWwuu5+OKLR8df85rXrBm76KKLpjr2Ilg9eOuZJv/JdDUwTf6TzV8D8r/1yP/6WT17a1pEDVy9\nl9aA1bO3nl7+3zGD/H+qk//H76X5t3o2AAAA7AFNMwAAAHRomgEAAKBD0wwAAAAdmmYAAADosHo2\nTFg9mGUm/ywzq2czrYctegIzZvVslpnVswEAAGAPaJoBAACgQ9MMAAAAHZpmAAAA6NA0AwAAQIem\nGQAAADo0zQAAANChaQYAAIAOTTMAAAB0aJoBAACgQ9MMAAAAHZpmAAAA6NA0AwAAQIemGQAAADo0\nzQAAANChaQYAAIAOTTMAAAB0aJoBAACgQ9MMAAAAHZpmAAAA6NA0AwAAQIemGQAAADqqtbboOQAA\nAMCm5EwzAAAAdGiaAQAAoEPTDAAAAB2aZgAAAOjQNAMAAECHphkAAAA6NM0AAADQoWkGAACADk0z\nAAAAdGiaAQAAoEPTDAAAAB2aZgAAAOjQNAMAAECHphkAAAA6NM0AAADQoWkGAACADk0zAAAAdGia\nAQAAoEPTDAAAAB2aZgAAAOjQNAMAAECHphkAAAA6NM0AAADQoWkGAACADk0zAAAAdGiaAQAAoEPT\nDAAAAB2aZgAAAOjQNAMAAECHphkAAAA6NM0AAADQoWkGAACADk0zAAAAdGiaAQAAoEPTDAAAAB2a\nZgAAAOjQNAMAAECHphkAAAA6NM0AAADQoWkGAACADk0zAAAAdGiaAQAAoEPTDAAAAB2aZgAAAOjQ\nNAMAAECHphkAAAA6NM0AAADQoWkGAACADk0zAAAAdGiaAQAAoEPTDAAAAB2a5g1QVSdX1Y1Vdfg6\n9j1hsu/xGzG3VY99t6p6W1V9vapuqKqHb/Qc2Hrkn2WnBlhm8s+yUwNbw9I1zVX1xEkYd2zXVtWn\nqup/VdVt5/SwbbKtnMepVfXEney/CH+S5IeS/EaSn0/yoXk+2Krvw8rt1+f5uMtM/ndqQ/OfJFV1\n26r6o6r6wuR78dmqesW8H3eZqYGd2rAaGPk+rN5+bl6Pvczkf6c2+negw6rqd6vq4qq6pqourapX\nVNUd5/m4y04N7NRG18Btq+qPq+rLkxq4qKp+Zp6PuSeqtUV9XxZjEtCzkjwnyaVJtiW5f5InTP5/\nz9badTN+zEqyf2vt+hVjH0uyvbX2YyP7H7By341QVduSXJPk+a210zfoMW9M8rYMRbrSR1prn9iI\nOSwb+e8nwgwKAAAeDklEQVTOcRH5v0OSC5LcmOTlSS5Pcvsk92mtPXIj5rCM1EB3jhtaA1V15yT/\nceSmZyY5KskdWmtXzHsey0b+u3Pc6PxXkguT/Lsk/zvJp5PcLclTk3wjyQ+01r4173ksIzXQneNG\n18ChST6c5DZJ/meSLyf52SQnJHlsa+01857DtPZb9AQW6K2ttQ9P/n1WVV2Z5BlJHpHktbN8oDa8\nMrHu8G90oUzseHXtG7M6YFUd3Fq7Zhe7Xdxa+/NZPSbrJv83tYj8vyzD1+XY1trXZ/W4rJsauKkN\nrYHW2qUZfkFduf+2JC9N8g4N89zJ/01t9HPA/ZIcm+QprbU/XHGfi5O8MsmDkrxpVnNhlBq4qY2u\ngVOS3CXJj7XW/nay/x8meX+S36uqN7TWvjOruczC0l2evRPnJ6kkR+wYqKojqur1VfXVqvpWVb2v\nqh6y+o5V9atV9fHJPldW1Qer6jErbr/Jexmq6rMZLn/40RWXh5w/ue0m72WYXC7yzckvE6sf99VV\n9cXJK1g7xn6yqt5dVVdX1VVVdW5V/eDOPvGqOj3DLy8tyYsmj/+ZFbffu6r+uqq+MZnLeVV131XH\n2HG5y/FVdWZVfTnJ53f2uCvuu62qDlzPvsyN/G9g/qvqHkkenOR3W2tfr6oDq2qZX8TcDNTAgp4D\nVnh4kkOT/N8p78eek/+Nzf9hk4+rXxz60uTjtTubM3OhBja2Bu6f4Uz73+4YmLy48Lok35fhjPOm\nomn+rrtNPn41Ga6zT/K+JD+e5CUZru8/MMmbq+oRO+5UVb+U5A+SfDzJ05L8tyQfSbIyTKvfy/C0\nJF9I8okkj0vy+CS/tWr/HV6b5OAkD1052ao6KMnDkrx+ErJU1c8nOTfJN5P8epLnJfmBJO+pnS8+\n8MYkT8/ww+LPJ/N5+uSYP5Tk3Ul+OMkZk2PeOcm7quo/jBzrzAyXGz13sv+unJzkW0murap/LO9j\nWxT539j8P2jyeW6vqndk+AXp2qr6q6q6007ux/yogcU8B6z0uAyXB5495f3Yc/K/sfn/UIbffZ5f\nVSdW1e2r6oQkL0jygSTn7eS+zIca2NgaODDjLw5dM5nHMTu572K01pZqS/LEJDckOTHJrZN8f5JH\n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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x24b5a7b0080>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# now show them for each class\n",
    "fig, m_axs = plt.subplots(2,5, figsize = (12,6))\n",
    "for i, c_ax in enumerate(m_axs.flatten()):\n",
    "    temp, mask = explanation.get_image_and_mask(i, positive_only=True, num_features=10, hide_rest=False, min_weight = 0.01 )\n",
    "    c_ax.imshow(label2rgb(mask,temp, bg_label = 0), interpolation = 'nearest')\n",
    "    c_ax.set_title('Positive for {}\\nActual {}'.format(i, y_test[wrong_idx]))\n",
    "    c_ax.axis('off')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true,
    "deletable": true,
    "editable": true
   },
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.5.2"
  },
  "widgets": {
   "state": {},
   "version": "1.1.2"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
